package com.itheima.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * ThreadLocal 工具类
 */
@SuppressWarnings("all")
public class ThreadLocalUtil {
    //提供ThreadLocal对象,
    /*
    1. TheadLocal 是一个线程内部的Map,用于存储线程内部的数据
    2. 使用ThreadLocal 实现多个线程分离，每个线程记录一个用户的数据，保证线程安全
    3. 对于业务来说，我们需要记录登录的用户信息（id, username）这些信息对于后续的其他业务有价值（帮助从数据库拿数据）
       通过ThreadLocal我们就统一拿到了这些用户信息，这样其他业务的函数就不用再去声明这些参数了
       本项目中我们的 ThreadLocal 中存储的是token解析出来的载荷信息。
     */
    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();

    //根据键获取值
    public static <T> T get(){
        return (T) THREAD_LOCAL.get();
    }
	
    //存储键值对
    public static void set(Object value){
        THREAD_LOCAL.set(value);
    }


    //清除ThreadLocal 防止内存泄漏
    public static void remove(){
        THREAD_LOCAL.remove();
    }
}
